/**
 * 闲置交换服务API
 * 提供物品交换、互换请求、交易管理等相关接口
 * @author WeChat Mini Program Team
 * @since 2025-08-13
 */

const Request = require('./request');

class SwapService {
  constructor() {
    this.service = 'swap';
  }

  // ==================== 健康检查 ====================

  /**
   * 服务健康检查
   * @returns {Promise<Object>} 健康状态
   */
  async healthCheck() {
    return Request.get('/health', {}, {
      service: this.service,
      showError: false
    });
  }

  // ==================== 闲置物品管理 ====================

  /**
   * 创建闲置物品
   * @param {Object} itemData 物品数据
   * @param {string} itemData.title 物品标题
   * @param {string} itemData.description 物品描述
   * @param {string} itemData.category 物品分类
   * @param {string} itemData.condition 物品状况
   * @param {string} itemData.images 物品图片URL数组（JSON字符串格式）
   * @param {number} itemData.estimated_value 估值（元）
   * @param {number} itemData.city_id 城市ID
   * @param {string} itemData.district 区/县
   * @param {string} itemData.tags 标签（逗号分隔）
   * @returns {Promise<Object>} 创建结果
   */
  async createItem(itemData) {
    return Request.post('/swap/items', itemData, {
      service: this.service,
      showLoading: true,
      loadingText: '发布中...'
    });
  }

  /**
   * 搜索闲置物品
   * @param {Object} params 搜索参数
   * @param {string} params.keyword 搜索关键词
   * @param {string} params.category 物品分类
   * @param {string} params.condition 物品状况
   * @param {number} params.city_id 城市ID
   * @param {number} params.min_value 最小估值
   * @param {number} params.max_value 最大估值
   * @param {string} params.status 物品状态
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @param {string} params.sort 排序方式
   * @returns {Promise<Object>} 搜索结果
   */
  async searchItems(params = {}) {
    return Request.get('/swap/items', params, {
      service: this.service
    });
  }

  /**
   * 获取物品详情
   * @param {number} itemId 物品ID
   * @returns {Promise<Object>} 物品详情
   */
  async getItemDetail(itemId) {
    return Request.get(`/swap/items/${itemId}`, {}, {
      service: this.service
    });
  }

  /**
   * 更新物品信息
   * @param {number} itemId 物品ID
   * @param {Object} itemData 物品数据
   * @returns {Promise<Object>} 更新结果
   */
  async updateItem(itemId, itemData) {
    return Request.put(`/swap/items/${itemId}`, itemData, {
      service: this.service,
      showLoading: true,
      loadingText: '更新中...'
    });
  }

  /**
   * 删除物品
   * @param {number} itemId 物品ID
   * @returns {Promise<Object>} 删除结果
   */
  async deleteItem(itemId) {
    return Request.delete(`/swap/items/${itemId}`, {
      service: this.service,
      showLoading: true,
      loadingText: '删除中...'
    });
  }

  /**
   * 增加浏览次数
   * @param {number} itemId 物品ID
   * @returns {Promise<Object>} 增加浏览次数结果
   */
  async increaseItemViews(itemId) {
    return Request.post(`/swap/items/${itemId}/like`, {}, {
      service: this.service,
      showError: false
    });
  }

  // ==================== 我的物品 ====================

  // 注：获取我的物品使用searchItems，传入user_id参数即可

  // ==================== 互换请求管理 ====================

  /**
   * 创建互换请求
   * @param {Object} requestData 请求数据
   * @param {number} requestData.requester_item_id 请求者的物品ID
   * @param {number} requestData.target_item_id 目标物品ID
   * @param {string} requestData.message 附加消息
   * @returns {Promise<Object>} 创建结果
   */
  async createSwapRequest(requestData) {
    return Request.post('/swap/requests', requestData, {
      service: this.service,
      showLoading: true,
      loadingText: '发送请求中...'
    });
  }

  /**
   * 搜索互换请求
   * @param {Object} params 搜索参数
   * @param {string} params.status 请求状态
   * @param {number} params.city_id 城市ID
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @returns {Promise<Object>} 请求列表
   */
  async searchSwapRequests(params = {}) {
    return Request.get('/swap/requests', params, {
      service: this.service
    });
  }

  /**
   * 获取请求详情
   * @param {number} requestId 请求ID
   * @returns {Promise<Object>} 请求详情
   */
  async getSwapRequestDetail(requestId) {
    return Request.get(`/swap/requests/${requestId}`, {}, {
      service: this.service
    });
  }

  /**
   * 更新请求状态
   * @param {number} requestId 请求ID
   * @param {Object} statusData 状态数据
   * @param {string} statusData.status 新状态
   * @param {string} statusData.message 回复消息
   * @returns {Promise<Object>} 更新结果
   */
  async updateSwapRequestStatus(requestId, statusData) {
    return Request.put(`/swap/requests/${requestId}/status`, statusData, {
      service: this.service,
      showLoading: true,
      loadingText: '处理中...'
    });
  }

  // 注：接受/拒绝/取消请求使用updateSwapRequestStatus方法，传入相应的status即可
  
  /**
   * 获取用户请求列表
   * @param {number} userId 用户ID
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 用户请求列表
   */
  async getUserRequests(userId, params = {}) {
    return Request.get(`/swap/users/${userId}/requests`, params, {
      service: this.service
    });
  }

  // 注：分类管理、区域管理等应使用region服务
  // 注：收藏、评价、举报、消息等功能在API文档中未定义，如需要可后续添加
}

module.exports = new SwapService();
